'''
Run.py
'''

from Words import Words
from input import get_words
from classifier_util import *
import input
import math
import nltk
import random

# Sciezka do zbioru dokumentow trenujacych
TRAIN_DIR = 'TRAIN'
# Sciezka do zbioru dokumentow testowych
TEST_DIR = 'TEST'

# Przygotowanie zbioru par ('sciezka', 'numer klasy') ze zbioru treningowego (TRAIN_DIR)
print '=> Reading files'
train_docs = input.read_docs(TRAIN_DIR)
random.seed(404)
random.shuffle(train_docs)

# Przygotowanie zbioru par ('sciezka', 'numer klasy') ze zbioru testowego (TEST_DIR)
test_docs = input.read_docs(TEST_DIR)

print '=> Creating dictionaries'
words = Words(train_docs)
words.create_most_frequent_words(1700)

# Reprezentacja zbiorow dokumentow (testowego i treningowego) w postaci zbioru atrybutow. 
train_featuresets = [(words.to_features(get_words(doc)), c) for (doc, c) in train_docs]
test_featuresets = [(words.to_features(get_words(doc)), c) for (doc, c) in test_docs]

# Trenowanie/testowanie roznych klasyfikatorow na tych zbiorach.
print '=> Training Bayess Classifier'
# Klasyfikator: NaiveBayesClassifier
bayesClassifier = nltk.NaiveBayesClassifier.train(train_featuresets)
# Wyswietlenie najcenniejszaych wskaznikow na podstawie zbioru trenujacego.
bayesClassifier.show_most_informative_features(30)
# Dokladnosc wg klasyfikatora NaiveBayesClassifier
print 'BayesClassifier ACCURACY: ', nltk.classify.accuracy(bayesClassifier, test_featuresets)

# Klasyfikacja kazdego dokumentu osobno i wyswietlenie tych blednie sklasyfikowanych
classify_and_show_mistakes(bayesClassifier, test_featuresets,test_docs)

print '=> Training DecisionTree Classifier'
# Klasyfikator: DecisionTreeClassifier
treeClassifier = nltk.DecisionTreeClassifier.train(train_featuresets);
# Dokladnosc wg klasyfikatora DecisionTreeClassifie
print 'TreeClassifier ACCURACY: ', nltk.classify.accuracy(treeClassifier, test_featuresets);

# Klasyfikacja kazdego dokumentu osobno i wyswietlenie tych blednie sklasyfikowanych
classify_and_show_mistakes(treeClassifier, test_featuresets,test_docs)





